const jwt = require('jsonwebtoken');

/**
 * Token验证中间件
 * 用于需要权限验证的路由
 */
module.exports = function(req, res, next) {
  // 获取token
  const token = req.headers.authorization ? req.headers.authorization.split(' ')[1] : null;
  
  console.log('验证Token:', token ? '已提供' : '未提供');
  
  if (!token) {
    console.log('Token未提供，返回401错误');
    return res.status(401).json({ code: 401, message: '未提供认证令牌', data: null });
  }
  
  try {
    // 验证token
    console.log('正在验证Token...');
    const decoded = jwt.verify(token, 'bookshop_token');
    console.log('Token验证成功，用户信息:', decoded);
    
    // 将解码后的用户信息添加到请求对象中
    req.data = decoded;
    req.user = decoded; // 确保同时设置req.user
    
    // 检查是否是管理员
    req.data.isAdmin = decoded.role === 'admin';
    req.user.isAdmin = decoded.role === 'admin';
    
    // 如果请求路径以/admin开头，但用户不是管理员，则拒绝访问
    if (req.path.startsWith('/admin') && !req.data.isAdmin) {
      console.log('非管理员尝试访问管理员API:', req.path);
      return res.status(403).json({ code: 403, message: '无权访问管理员API', data: null });
    }
    
    next(); // 继续下一步
  } catch (error) {
    console.error('Token验证失败:', error.message);
    
    if (error.name === 'TokenExpiredError') {
      return res.status(401).json({ code: 401, message: '认证令牌已过期', data: null });
    }
    return res.status(401).json({ code: 401, message: '无效的认证令牌', data: null });
  }
}; 